Application programs often have to interact with peripheral devices, such as printers, card readers, bar code readers, printers, and the like. However, the device drivers operate at the lowest and most secure layer of the Operating System (OS). The OS uses a device driver to issue low-level commands to the devices on behalf of higher-level commands issued from the application programs. This ensures that the devices operate properly (e.g., two applications don't access a device simultaneously corrupting information on the devices) and ensures that the unauthorized operations are not performed by applications, which may also corrupt the devices. It also ensures that applications don't have to issue byte level commands, perhaps, even in binary format to perform operations against peripheral devices.
Generally, device drivers are OS specific, which means a single device distributes a different version of its device driver for each OS that the device is supported by.
A variety of Application Programming Interfaces (APIs) and platforms exist in the industry to create more meaningful interfaces to some classes of peripheral devices and for particular industries. For example, CEN/XFS provides financial applications with a platform for interacting with financial devices, such as Point-Of-Sale (POS) terminals, Automated Teller Machines (ATMs), and the like. CEN/XFS seeks to provide a standard mechanism for accessing a device regardless of the manufacturers of that device. In practice, the hardware vendors have created their own flavors of XFS. Moreover, CEN/XFS is largely tied to the Windows® OS.
OPOS (Object Linking and Embedding (OLE) for retail POS) is a platform specific implementation of UnifiedPOS standard and geared to the retail industry. Manufacturers of devices provide packages of service objects compliant with OPOS.
JAVAPOS®, JAVAPOS® is based on UnifiedPOS and is also used for POS devices accessible from Windows® or Linux®.
The problem quickly becomes noticeable that most platforms and APIs are OS specific, device type specific, and even manufacturer specific. As a result, deploying a new OS or new hardware devices into existing enterprise environments is not seamless and not easily ported. Often legacy applications have to be modified and changed to interact with devices when the OS is updated or when interfaces are changed for supporting third-party APIs.
Moreover, even if device hardware connections are standardized through the industry (e.g., Universal Serial Bus (USB), RS232, etc.) there is no common software driver stack from application interfaces to device firmware. Consequently, drivers for hardware devices cannot be shared across business verticals that wish to share the hardware devices.
Therefore, there is a need for a more generic and robust device driver that is OS independent and sharable across applications.